/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.claro.administracionSolicitudes.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author USUARIO
 */
@Entity
@Table(name = "USUARIO_TEMPORAL")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "UsuarioTemporal.findAll", query = "SELECT u FROM UsuarioTemporal u"),
    @NamedQuery(name = "UsuarioTemporal.findAllActivo", query = "SELECT u FROM UsuarioTemporal u WHERE u.activo = :activo"),
    @NamedQuery(name = "UsuarioTemporal.findByIdUsuarioTemporalActivoById", query = "SELECT u FROM UsuarioTemporal u WHERE u.idUsuarioTemporal = :idUsuarioTemporal AND u.activo = :activo"),
    @NamedQuery(name = "UsuarioTemporal.findByNombresNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.nombresNuevo = :nombresNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByApellidosNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.apellidosNuevo = :apellidosNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByNumeroDocumentoNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.numeroDocumentoNuevo = :numeroDocumentoNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByCorreoNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.correoNuevo = :correoNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByTelefonoNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.telefonoNuevo = :telefonoNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByExtensionNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.extensionNuevo = :extensionNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByTelefonoPersonalNuevo", query = "SELECT u FROM UsuarioTemporal u WHERE u.telefonoPersonalNuevo = :telefonoPersonalNuevo"),
    @NamedQuery(name = "UsuarioTemporal.findByIdUsuario", query = "SELECT u FROM UsuarioTemporal u WHERE u.idUsuarioActual.idUsuario = :idUsuarioActual AND u.activo = :activo")
})
public class UsuarioTemporal extends EntidadBase implements Serializable {

    @Id
    @Basic(optional = false)
    @SequenceGenerator(name = "seqUsuarioTemporal", sequenceName = "USUARIO_TEMPORAL_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "seqUsuarioTemporal")
    @Column(name = "ID_USUARIO_TEMPORAL", nullable = false)
    private Integer idUsuarioTemporal;
    @Size(max = 200)
    @Column(name = "NOMBRES_NUEVO", length = 200)
    private String nombresNuevo;
    @Size(max = 200)
    @Column(name = "APELLIDOS_NUEVO", length = 200)
    private String apellidosNuevo;
    @Column(name = "NUMERO_DOCUMENTO_NUEVO")
    private Long numeroDocumentoNuevo;
    @Size(max = 250)
    @Column(name = "CORREO_NUEVO", length = 250)
    private String correoNuevo;
    @Size(max = 15)
    @Column(name = "TELEFONO_NUEVO", length = 15)
    private String telefonoNuevo;
    @Size(max = 6)
    @Column(name = "EXTENSION_NUEVO", length = 6)
    private String extensionNuevo;
    @Size(max = 15)
    @Column(name = "TELEFONO_PERSONAL_NUEVO", length = 15)
    private String telefonoPersonalNuevo;
    @Basic(optional = false)
    @Column(name = "ACTIVO")
    private short activo;
    @JoinColumn(name = "ID_USUARIO_ACTUAL", referencedColumnName = "ID_USUARIO", nullable = false)
    @ManyToOne(optional = false)
    private Usuario idUsuarioActual;
    @JoinColumn(name = "TIPO_DOCUMENTO_NUEVO", referencedColumnName = "ID_TIPO_DOCUMENTO")
    @ManyToOne
    private TipoDocumento tipoDocumentoNuevo;
    @JoinColumn(name = "GERENCIA_NUEVO", referencedColumnName = "ID_GERENCIA")
    @ManyToOne
    private Gerencia gerenciaNuevo;
    @JoinColumn(name = "EMPRESA_NUEVO", referencedColumnName = "ID_EMPRESA")
    @ManyToOne
    private Empresa empresaNuevo;
    @JoinColumn(name = "CIUDAD_NUEVO", referencedColumnName = "ID_CIUDAD")
    @ManyToOne
    private Ciudad ciudadNuevo;
    @JoinColumn(name = "CARGO_NUEVO", referencedColumnName = "ID_CARGO")
    @ManyToOne
    private Cargo cargoNuevo;
    @JoinColumn(name = "GRUPO_NUEVO", referencedColumnName = "ID_GRUPO")
    @ManyToOne
    private Grupo grupoNuevo;
    private static final long serialVersionUID = 1L;

    public UsuarioTemporal() {
    }

    public UsuarioTemporal(Integer idUsuarioTemporal) {
        this.idUsuarioTemporal = idUsuarioTemporal;
    }

    public UsuarioTemporal(Usuario nuevoUsuario) {

        this.idUsuarioActual = nuevoUsuario;

        if (nuevoUsuario.getNombres() != null) {
            this.nombresNuevo = nuevoUsuario.getNombres();
        }
        if (nuevoUsuario.getApellidos() != null) {
            this.apellidosNuevo = nuevoUsuario.getApellidos();
        }
        if (nuevoUsuario.getNumeroDocumento() != null) {
            this.numeroDocumentoNuevo = nuevoUsuario.getNumeroDocumento();
        }
        if (nuevoUsuario.getCorreo() != null) {
            this.correoNuevo = nuevoUsuario.getCorreo();
        }
        if (nuevoUsuario.getTelefono() != null) {
            this.telefonoNuevo = nuevoUsuario.getTelefono();
        }
        if (nuevoUsuario.getExtension() != null) {
            this.extensionNuevo = nuevoUsuario.getExtension();
        }
        if (nuevoUsuario.getTelefonoPersonal() != null) {
            this.telefonoPersonalNuevo = nuevoUsuario.getTelefonoPersonal();
        }
        if (nuevoUsuario.getTipoDocumento() != null) {
            this.tipoDocumentoNuevo = nuevoUsuario.getTipoDocumento();
        }
        if (nuevoUsuario.getEmpresa() != null) {
            this.empresaNuevo = nuevoUsuario.getEmpresa();
        }
        if (nuevoUsuario.getCiudad() != null) {
            this.ciudadNuevo = nuevoUsuario.getCiudad();
        }
        if (nuevoUsuario.getCargo() != null) {
            this.cargoNuevo = nuevoUsuario.getCargo();
        }
        if (nuevoUsuario.getGerencia() != null) {
            this.gerenciaNuevo = nuevoUsuario.getGerencia();
        }
        if (nuevoUsuario.getGrupoList() != null && !nuevoUsuario.getGrupoList().isEmpty()) {
            this.grupoNuevo = nuevoUsuario.getGrupoList().get(0);
        }
    }

    public Usuario getUsuarioNuevo() {

        Usuario nuevo = idUsuarioActual;

        if (nombresNuevo != null) {
            nuevo.setNombres(nombresNuevo);
        }
        if (apellidosNuevo != null) {
            nuevo.setApellidos(apellidosNuevo);
        }
        if (numeroDocumentoNuevo != null) {
            nuevo.setNumeroDocumento(numeroDocumentoNuevo);
        }
        if (correoNuevo != null) {
            nuevo.setCorreo(correoNuevo);
        }
        if (telefonoNuevo != null) {
            nuevo.setTelefono(telefonoNuevo);
        }
        if (extensionNuevo != null) {
            nuevo.setExtension(extensionNuevo);
        }
        if (telefonoPersonalNuevo != null) {
            nuevo.setTelefonoPersonal(telefonoPersonalNuevo);
        }
        if (tipoDocumentoNuevo != null) {
            nuevo.setTipoDocumento(tipoDocumentoNuevo);
        }
        if (gerenciaNuevo != null) {
            nuevo.setGerencia(gerenciaNuevo);
        }
        if (empresaNuevo != null) {
            nuevo.setEmpresa(empresaNuevo);
        }
        if (ciudadNuevo != null) {
            nuevo.setCiudad(ciudadNuevo);
        }
        if (cargoNuevo != null) {
            nuevo.setCargo(cargoNuevo);
        }
        if (grupoNuevo != null) {
            List<Grupo> grupos = new ArrayList<Grupo>();
            grupos.add(grupoNuevo);

            nuevo.setGrupoList(grupos);
        }

        return nuevo;
    }

    public Integer getIdUsuarioTemporal() {
        return idUsuarioTemporal;
    }

    public void setIdUsuarioTemporal(Integer idUsuarioTemporal) {
        this.idUsuarioTemporal = idUsuarioTemporal;
    }

    public String getNombresNuevo() {
        return nombresNuevo;
    }

    public void setNombresNuevo(String nombresNuevo) {
        this.nombresNuevo = nombresNuevo;
    }

    public String getApellidosNuevo() {
        return apellidosNuevo;
    }

    public void setApellidosNuevo(String apellidosNuevo) {
        this.apellidosNuevo = apellidosNuevo;
    }

    public Long getNumeroDocumentoNuevo() {
        return numeroDocumentoNuevo;
    }

    public void setNumeroDocumentoNuevo(Long numeroDocumentoNuevo) {
        this.numeroDocumentoNuevo = numeroDocumentoNuevo;
    }

    public String getCorreoNuevo() {
        return correoNuevo;
    }

    public void setCorreoNuevo(String correoNuevo) {
        this.correoNuevo = correoNuevo;
    }

    public String getTelefonoNuevo() {
        return telefonoNuevo;
    }

    public void setTelefonoNuevo(String telefonoNuevo) {
        this.telefonoNuevo = telefonoNuevo;
    }

    public String getExtensionNuevo() {
        return extensionNuevo;
    }

    public void setExtensionNuevo(String extensionNuevo) {
        this.extensionNuevo = extensionNuevo;
    }

    public String getTelefonoPersonalNuevo() {
        return telefonoPersonalNuevo;
    }

    public void setTelefonoPersonalNuevo(String telefonoPersonalNuevo) {
        this.telefonoPersonalNuevo = telefonoPersonalNuevo;
    }

    public Usuario getIdUsuarioActual() {
        return idUsuarioActual;
    }

    public void setIdUsuarioActual(Usuario idUsuarioActual) {
        this.idUsuarioActual = idUsuarioActual;
    }

    public TipoDocumento getTipoDocumentoNuevo() {
        return tipoDocumentoNuevo;
    }

    public void setTipoDocumentoNuevo(TipoDocumento tipoDocumentoNuevo) {
        this.tipoDocumentoNuevo = tipoDocumentoNuevo;
    }

    public Gerencia getGerenciaNuevo() {
        return gerenciaNuevo;
    }

    public void setGerenciaNuevo(Gerencia gerenciaNuevo) {
        this.gerenciaNuevo = gerenciaNuevo;
    }

    public Empresa getEmpresaNuevo() {
        return empresaNuevo;
    }

    public void setEmpresaNuevo(Empresa empresaNuevo) {
        this.empresaNuevo = empresaNuevo;
    }

    public Ciudad getCiudadNuevo() {
        return ciudadNuevo;
    }

    public void setCiudadNuevo(Ciudad ciudadNuevo) {
        this.ciudadNuevo = ciudadNuevo;
    }

    public Cargo getCargoNuevo() {
        return cargoNuevo;
    }

    public void setCargoNuevo(Cargo cargoNuevo) {
        this.cargoNuevo = cargoNuevo;
    }

    public short getActivo() {
        return activo;
    }

    public void setActivo(short activo) {
        this.activo = activo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuarioTemporal != null ? idUsuarioTemporal.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof UsuarioTemporal)) {
            return false;
        }
        UsuarioTemporal other = (UsuarioTemporal) object;
        return (this.idUsuarioTemporal != null || other.idUsuarioTemporal == null) && (this.idUsuarioTemporal == null || this.idUsuarioTemporal.equals(other.idUsuarioTemporal));
    }

    @Override
    public String toString() {
        return "co.com.claro.administracionSolicitudes.entity.UsuarioTemporal[ idUsuarioTemporal=" + idUsuarioTemporal + " ]";
    }

    @Override
    public String obtenerNombreClase() {
        return "UsuarioTemporal";
    }

    public Grupo getGrupoNuevo() {
        return grupoNuevo;
    }

    public void setGrupo(Grupo grupoNuevo) {
        this.grupoNuevo = grupoNuevo;
    }

}
